home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
THINKC
/
TCL1
/
GRAPH_FO
/
(GRAPH
/
CGRAPHTE
/
CLINKTAS.C
< prev
next >
Wrap
Text File
|
1991-02-12
|
2KB
|
91 lines
/******************************************************************************
CLinkTask.h
SUPERCLASS = CGraphTask.c
Copyright ⌐ 1991 Maarten Meijer. All rights reserved.
CIS 100016,1764; FidoNet 2:512/114
*******************************************************************************/
#include "CLinkTask.h"
static CursHandle gLinker = NULL;
/******************************************************************************
IGraphTask
Override to search the esssential things for linking.
*******************************************************************************/
void
CLinkTask::IGraphTask(short aNameIndex, CPanorama *theRama, Graph *theGraph,
Point from) {
inherited::IGraphTask(aNameIndex, theRama, theGraph, from);
if(gLinker == NULL)
gLinker = GetCursor(10);
SetCursor(*gLinker);
itsFromVertex = itsGraph->FindVertex(from);
itsToVertex = NULL;
}
void
CLinkTask::EndTracking(Point *currPt, Point *prevPt, Point *startPt) {
inherited::EndTracking(currPt, prevPt, startPt);
Do();
}
/******************************************************************************
Draw
Draw the line to link the two vertices.
*******************************************************************************/
void
CLinkTask::Draw(Point a, Point b) {
Point c;
c = itsFromVertex->GetCenter();
MoveTo(c.h, c.v);
LineTo(b.h, b.v);
}
/******************************************************************************
Do
Make the link between two vertices if the mousedrag was succesful.
*******************************************************************************/
void
CLinkTask::Do() {
GrVertex * newVertex;
GrEdge * newEdge;
newVertex = itsGraph->FindVertex(itsStop);
if( ( itsFromVertex != (GrVertex *)NULL ) &&
( newVertex != (GrVertex *)NULL ) &&
/* multi graph check */
( newEdge = itsGraph->AddEdge(itsFromVertex, newVertex, TRUE) ) ) {
itsEdge = newEdge;
Notify();
}
else
Dispose();
}
/******************************************************************************
Undo
Delete the link just made
*******************************************************************************/
void
CLinkTask::Undo() {
Rect area;
itsRama->Prepare();
itsGraph->RemoveEdge(itsEdge, TRUE);
}
void
CLinkTask::Redo() {
itsRama->Prepare();
Do();
}